package bll

import (
	"context"
	"github.com/LyricTian/gin-admin/v7/internal/app/schema"
	"github.com/LyricTian/gin-admin/v7/pkg/errors"
	"github.com/LyricTian/gin-admin/v7/pkg/util/uuid"
)


func (a *Set) checkCategoryKey(ctx context.Context, category, key, creator string) error {
	data, err := a.SetModel.GetFirst(ctx, schema.SetQueryParam{Key: key, Category: category, Creator: creator})
	if err != nil {
		return err
	}
	if data != nil {
		return errors.New400Response("该选项已经存在")
	}
	return nil
}

// TODO 系统设置权限问题
// 分类 key 还是什么```` auth level等级来区分
// 权限等级如何直接和数据库字段关联,这样方便筛选数据
// 能看自己的数据
// 系统设置,个人设置,app设置,商铺设置等等```
// 如何设计数据权限比较好???
func (a *Set) SetToMap(ctx context.Context, params schema.SetQueryParam) (schema.MapSet, error) {
	data, err := a.Query(ctx, params)
	if err != nil {
		return nil, err
	}
	return data.Data.ToMap(), nil
}

func (a *Set) MapToSet(ctx context.Context, Type int, creator string, data schema.MapSet) error {
	sets := data.ToSets(Type, creator)
	for _, set := range sets {
		item, err := a.GetFirst(ctx, schema.SetQueryParam{Creator: set.Creator, Category: set.Category, Key: set.Key})
		if err != nil {
			//	创建value
			set.ID = uuid.NewID()
			err := a.SetModel.Create(ctx, *set)
			if err != nil {
				return err
			}
			continue
		}
		if set.Value == item.Value {
			continue
		}
		//	更新 设置
		item.Status = set.Status
		item.Value = set.Value
		err = a.SetModel.Update(ctx, item.ID, *item)
		if err != nil {
			return err
		}
	}

	return nil
}
